\begin{Exercise}[title={作用域},difficulty=1]
\label{ex:scope}
\Question\label{ex:scope q1} 下面的程序有什么错误？

\begin{lstlisting}[numbers=right]
package main

import "fmt"
                                                                                                   
func main() {
        for i := 0; i < 10; i++ {
                fmt.Printf("%v\n", i)
        }
	fmt.Printf("%v\n", i)
}
\end{lstlisting}

\end{Exercise}

\begin{Answer}
\Question
这个程序不能被编译，由于第~9 行的变量~\var{i}，未定义：
\var{i} 仅在~\key{for} 循环中有效。为了修正这个，
\func{main()} 应修改为：
\begin{lstlisting}[numbers=none]
func main() {
        var i int
        for i = 0; i < 10; i++ {
                fmt.Printf("%v\n", i)
        }
	fmt.Printf("%v\n", i)
}
\end{lstlisting}
现在~\var{i} 在~\key{for} 循环外定义，并且在其后仍然可访问。
这会打印数字从~0 到~10。
\end{Answer}
